class MyPageHeader extends BaseEditMaster {
    constructor(dataId, currentTaskPrivileges, nextTaskPrivileges, pageStatus, pageListData,
            returnUrl, fetchDataUrl, saveUrl, exportUrl, printUrl) {
        super(dataId, currentTaskPrivileges, nextTaskPrivileges, pageStatus, pageListData,
                returnUrl, fetchDataUrl, saveUrl, exportUrl, printUrl);
        this.checkUrl = null;
        this.uncheckUrl = null;
    }
    DoBack() {
        if (this.pageStatus !== 4) {
            location.assign(parent.basePath + this.returnUrl + '?flag=1');
        } else {
            location.assign(parent.basePath + '/purchase/po_notice/list.html?flag=1');
        }
    }
    // 得到主表数据
    GetEntityData() {
        let item = {};
        item['headerId'] = $("#HeaderId").val();
        item['billNo'] = $.trim($("#BillNo").val());                                  // 补料单号（自动生成）
        item['feedingTypeId'] = $.trim($("#FeedingTypeId").val());                    // 补料类型（1、库存订料 2、生产补料 3、设计用料）        
        item['scheduledDate'] = $.trim($("#ScheduledDate").val());                    // 订料日期
        item['scheduledBy'] = $.trim($("#ScheduledBy").val());                        // 订料人
        item['description'] = formatNullInputValue($.trim($("#Description").val()));  // 备注
        item['createdBy'] = $.trim($("#UserId").val());
        item['updatedBy'] = $.trim($("#UserId").val());
        //return JSON.stringify(item);
        return item;
    }
    FillData(data) {
        let item = data.HeaderEntity;
        $("#HeaderId").val(item.headerId);
        $("#BillNo").val(item.billNo);
        $("#FeedingTypeId").val(item.feedingTypeId);
        $("#ScheduledDate").val(item.scheduledDate);
        $("#ScheduledBy").val(item.scheduledBy);
        $("#ScheduledByName").val(item.scheduledByName);
        $("#UpdatedByName").val(item.updatedByName);
        $("#UpdatedDate").val(formatNullData(item.updatedDate));
        $("#CheckedBy").val(item.checkedBy);
        $("#CheckedByName").val(item.checkedByName);
        $("#CheckedDate").val(item.checkedDate);
        $("#Description").val(item.description);

        // 最后的审核人、审核日期
        $("#CheckedBy").val(item.checkedBy);
        $("#CheckedByName").val(item.checkedByName);
        $("#CheckedDate").val(item.checkedDate === null ? '' : item.checkedDate);
        $("#CheckedStatus").val(item.checkedStatus);
        $('#FlowOrderNo').val(item.flowOrderNo);

        // 设置用于控制的用户ID
        this.privateUserId = item.scheduledBy;

        if (item.poNoticeFlag) {
            $("#NoticedTip").removeClass().addClass("huzo_status").addClass("huzo_status__green");
            $("#NoticedTip").html("通知：已发送");
            $("#notice_user_list").empty();
            let _users_item = "";
            let _users_list = data.PurchasedByNameList;
            for (let i = 0; i < _users_list.length; i++) {
                _users_item += '<li>' + _users_list[i].purchasedbyname + '</li>';
            }
            $("#notice_user_list").html(_users_item);
            $("#area_notice").show();
        } else {
            $("#NoticedTip").removeClass().addClass("huzo_status").addClass("huzo_status__red");
            $("#NoticedTip").html("未通知采购");
            $("#notice_user_list").empty();
            $("#area_notice").hide();
        }

        if (item.poOpeningRows === true || item.poOverFlag === true) {
            $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__green");
            $("#PoOverTip").html("采购：完成");
            $("#PoOverFlag").prop("checked", true);  // 设置完成标记
        } else {
            if (item.quotedFlag === false) {
                $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__red");
                $("#PoOverTip").html("未采购");
                $("#PoOverFlag").prop("checked", false);
            } else {
                $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__yellow");
                $("#PoOverTip").html("采购：进行中");
                $("#PoOverFlag").prop("checked", false);
            }
        }

        // 显示明细数据
        _InstancePageLines.BuildDataTable(data.LinesList);

        this.currentTaskPrivileges = item.currentTaskPrivileges;
        this.nextTaskPrivileges = item.nextTaskPrivileges;
        this.unCheckFlag = item.unCheckFlag;
        //审核控制
        this.SetPageElementStatus(this.HidePageElement, this.ShowPageElement, function () {
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });

        if (this.pageStatus === 4) {
            $("#ButNew").hide();
            $("#ButNotice").hide();
            $("#ButPrint").hide();
            $("Button.act__save").hide();
            $("span.act__delete").removeClass("trash");
            $("span.act__delete i").removeClass("fa-all fa-trash-o fa-1");
        }

        $("#BillNo").focus();
    }
    DoSave() {
        // 如果有主表ID，则编辑否则新增
        if (parseInt($("#HeaderId").val()) === 0) {
            this.saveUrl = "/tech/mrp/feeding/header/save.html";
        } else {
            this.saveUrl = "/tech/mrp/feeding/header/save.html";
        }
        if (parseInt(this.pageStatus) === 1) {
            super.DoAjax(this.GetEntityData(), this.saveUrl, function (data, _this) {
                //_this.FillData(data);
                $("#HeaderId").val(data);
                _this.dataId = data;
                $("#Action").val(2);
                _this.pageStatus = 2;
                $("#ButPrint").show();
                $("#CheckedTip").removeClass().addClass("huzo_status").addClass("huzo_status__red");
                $("#CheckedTip").html("状态：未审核");
                $("#CheckedTip").show();
                //审核控制
                _this.SetPageElementStatus(_this.HidePageElement, _this.ShowPageElement, function () {
                    _InstancePageLines.AutoAdjustTableHeightForLines();
                });
                $("Button.act__save").show();
                $("#panelSlave").show();
                ShowSuccessMessagePanel('增加成功。');
            });
        } else {
            super.DoAjax(this.GetEntityData(), this.saveUrl, function (data, _this) {
                if (data > 0)
                    ShowSuccessMessagePanel('更新成功。');
            });
        }
    }
    New() {
        super.New();
        $("#HeaderId").val(0);
        $("#panelSlave").hide();

        // 默认设置一些值
        $("#ScheduledBy").val($("#UserId").val());
        $("#ScheduledByName").val($("#UserName").val());
        $("#ScheduledDate").val(getCurrentDate());
        $("#UpdatedBy").val($("#UserId").val());
        $("#BillNo").empty();
        $('#tabData11 tbody').empty();
        $('#tabData12 tbody').empty();

        //　审核情况
        $("#IsChecked").hide();
        $("#CheckedByName").val("");
        $("#CheckedDate").val("");
        $("#ButUpdate").show();
        $("#slaveBtnPanel").show();

        $("#ButExportToExcel").hide();        // 隐藏导出按钮
        $("#ButNotice").hide();               // 发送通知按钮
        $("#area_notice").hide();             // 隐藏采购通知区域
        $("#ButOverSwitcher").hide();         // 隐藏采购完成开关

        $(".huzo_notice_container").hide();   // 清空发送给的通知者
        $("#notice_user_list").empty();
        $("#NoticedTip").hide();
        $("#PoOverTip").hide();

        this.FetchNewBillNo();  // 设置新的单据号

        _InstancePageLines.rows = 0;
        //自适应高度
        _InstancePageLines.AutoAdjustTableHeightForLines();

        $("#BillNo").focus();
    }
    // 审核控制
    SetCheckStatus(checkedBy, moIsChecked) {
        if ($("#ActionAcl_6").length > 0 || parseInt($("#ActionAcl_6").val() === 1)) {  // 有审核权限
            if (checkedBy === null) {   // 未审核(隐藏反审按钮，显示审核按钮)
                this.currentTaskPrivileges = 1;
            } else {                    // 审核(隐藏审核按钮，显示反审按钮)
                this.currentTaskPrivileges = 0;
                $("#CheckedStatus").val("1");

                // 如果关联的物料需求计划处于锁定审核状态，那么也不能反审
                if (moIsChecked > 0) {
                    this.unCheckFlag = 0;
                } else {
                    this.unCheckFlag = 1;
                }
            }
        } else {                       // 无审核权限,则隐藏审核、反审按钮（通过删除来实现）
            this.currentTaskPrivileges = 0;
            this.nextTaskPrivileges = 0;
            this.unCheckFlag = 0;
        }
    }
    // 自动设置设置新的单据号
    FetchNewBillNo() {
        super.DoAjax({}, "/tech/mrp/feeding/header/fetchNewBillNo.html", function (data, _this) {
            $("#BillNo").val(data.BillNo);
        });
    }
    // 以下为选择框
    DoChoiceScheduledBy() {
        let _choice = new CommonChoice();
        _choice.DoChoiceUser(0, '选择订料人', '采购', (data) => {
            if (data) {
                // 判断是否数据发生了改变如果改变则设置改变标记
                if ($("#ScheduledByName").val() !== data[1]) {
                    $("#form_data").data("changed", true);
                }
                $("#ScheduledBy").val(data[0]);
                $("#ScheduledByName").val(data[1]);
            }
        });
        $("#ScheduledByName").focus();
    }
    //审核
    DoCheck() {
        this.checkUrl = "/tech/mrp/feeding/header/check.html";
        super.DoCheck(function (data, _this) {
            // 设置画面各个元素状态
            _this.SetPageElementStatus(_this.HidePageElement, _this.ShowPageElement, function () {
                _InstancePageLines.AutoAdjustTableHeightForLines();
            });
        });
    }
    Uncheck() {
        this.uncheckUrl = "/tech/mrp/feeding/header/unCheck.html";
        super.Uncheck(function (data, _this) {
            // 设置画面各个元素状态
            _this.SetPageElementStatus(_this.HidePageElement, _this.ShowPageElement, function () {
                _InstancePageLines.AutoAdjustTableHeightForLines();
            });
        });
    }
    // 发送采购下单通知
    SendNotice() {
        let _choice = new CommonChoice();
        _choice.DoChoiceUserGroupMember(1, '选择要通知的采购担当', (data) => {
            if (data) {
                let _result = [];
                for (let i = 0; i < data.length; i++) {
                    let item = {};
                    item['mrpId'] = parseInt($("#HeaderId").val());
                    //item['styleNo'] = $.trim($("#StyleNo").text());
                    item['purchasedBy'] = data[i]['UserId'];
                    item['updatedBy'] = parseInt($("#UserId").val());
                    item['createdBy'] = parseInt($("#UserId").val());
                    item['billType'] = "1";   // 表示补料单
                    _result.push(item);
                }

                // 发送通知
                super.DoAjax(_result, "/purchase/po_notice/sendPoNotice.html", (data, _this) => {
                    if (data.Result.length > 0) {
                        $("#NoticedTip").removeClass().addClass("huzo_status").addClass("huzo_status__green");
                        $("#NoticedTip").html("通知：已发送");
                        $("#notice_user_list").empty();
                        let _users_item = "";
                        for (let i = 0; i < data.Result.length; i++) {
                            _users_item += '<li>' + (data.Result)[i].purchasedbyname + '</li>';
                        }
                        $("#notice_user_list").html(_users_item);
                        $("#area_notice").show();
                        ShowSuccessMessagePanel("采购下单通知发送成功。");
                    } else {
                        ShowErrorMessagePanel("采购下单通知发送失败。");
                    }
                });
            }
        });
    }
    DoPrintPreview() {
        window.open(parent.basePath + this.printUrl + "?id=" + $("#HeaderId").val() + "&currentUser=" + $("#UserId").val());
    }
    Expand() {
        super.Expand(function () {
            // 自适应高度
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });
    }
    /* 折叠 */
    Collapse() {
        super.Collapse(function () {
            // 自适应高度
            _InstancePageLines.AutoAdjustTableHeightForLines();
        });
    }
    ShowPageElement() {
        $("Button.act__save").show();
        if (!$("span.act__delete").hasClass("act__delete")) {
            $("span.act__delete").addClass("trash");
            $("span.act__delete i").addClass("fa-all fa-trash-o fa-1");
        }
    }
    HidePageElement() {
        $("Button.act__save").hide();
        $("span.act__delete").removeClass("trash");
        $("span.act__delete i").removeClass("fa-all fa-trash-o fa-1");
    }
    // 设置完成状态
    SetPoOverFlag() {
        let _params = {};
        _params['HeaderId'] = parseInt($("#HeaderId").val());
        _params['CurrentUserId'] = parseInt($("#UserId").val());
        _params['WorkFlowId'] = $("#WorkFlowId").val() === '' ? 0 : parseInt($("#WorkFlowId").val());
        _params['PoOverFlag'] = $("#PoOverFlag").is(":checked") ? 1 : 0;  // 完成标记

        this.DoAjax(_params, "/tech/mrp/setPoOverFlag.html", (data) => {
            if ($("#PoOverFlag").is(":checked")) {
                $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__green");
                $("#PoOverTip").html("采购：完成");
                // 采购完成后不再允许变更该调达表
                $("button.act__save").hide();
                $("button.act__notice").hide();
                $("button.act__check").hide();
            } else {
                if (data.HeaderEntity !== null) {
                    let item = data.HeaderEntity;
                    if (item.quotedFlag === false) {
                        $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__red");
                        $("#PoOverTip").html("未采购");
                    } else {
                        if (item.poOpeningRows === true) {
                            $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__green");
                            $("#PoOverTip").html("采购：完成");
                        } else {
                            $("#PoOverTip").removeClass().addClass("huzo_status").addClass("huzo_status__yellow");
                            $("#PoOverTip").html("采购：进行中");
                        }
                    }
                }
            }
            ShowSuccessMessagePanel("完成状态设置成功。");
        });
    }
}

class MyPageLines extends BaseEditSlave {
    constructor() {
        super('', '', '');
        this.$input = null;
        this.numCheckbox = 0;
        this.clipboard = []; // 剪切板
        this.rows = 0;
    }
    BuildDataTable(result) {
        $('#tabData11 tbody').empty();
        $('#tabData12 tbody').empty();
        // 得到数据列表
        if (result === null || result.length === 0) {
            $('#loading').hide();
            this.rows = 0;
            // 自适应高度
            this.AutoAdjustTableHeightForLines();
            return false;
        }
        let content01 = '';
        let content02 = '';
        this.rows = result.length;
        this.numCheckbox = result.length;
        for (let i = 0; i < result.length; i++) {
            let id = result[i].linesId;
            let _trCss = '_mash_quoted="0"';
            let _editCellClass = 'class="edited-cell"';
            if (parseInt(result[i].quotedFlag) !== 0) {
                _trCss = '_mash_quoted="1" style="background-color:#606060; color:#fff"';
                _editCellClass = '';
            }
            content01 += '<tr _mash_id="' + id + '" _materialId="' + result[i].materialId + '" ' + _trCss + '>';
            if (parseInt(result[i].quotedFlag) !== 0) {
                content01 += '<td></td>';
            } else {
                content01 += '<td style="padding-left:5px; vertical-align:middle;"><label class="btn" for="R-' + result[i].linesId + '"><input id="R-' + result[i].linesId + '" name="_check_row" type="checkbox" onclick="_InstancePageLines.DoCheckRow($(this),\'_check_row\', $(\'#CheckAll\'));" value="' + result[i].linesId + '"/><i></i><span></span></label></td>';
                //     content01 += '<td style="text-align:center;"><label class="btn" for="R-' + result[i].linesId + '"><input id="R-' + result[i].linesId + '" name="_check_row" type="checkbox" onclick="linesHandler.DoCheckRow($(this));" value="' + result[i].linesId + '"/><i></i><span></span></label></td>';
            }
            if ($("#CheckedByName").val() !== "" && $("#CheckedByName").val() !== undefined) {
                content01 += '<td></td>';
            } else {
                if ($("#ActionAcl_4").length === 0 || parseInt($("#ActionAcl_4").val() === 0)) {
                    content01 += '<td></td>';
                } else {
                    if (parseInt(result[i].quotedFlag) !== 0) {
                        content01 += '<td></td>';
                    } else {
                        content01 += '<td class="column__action"><span title="删除" class="trash act__delete" onclick="_InstancePageLines.DoDeleteLines($(this));"><i class="fa-all fa-trash-o fa-1"></i></span></td>';
                    }
                }
            }
            content01 += '<td style="text-align:center;" ' + _trCss + '>' + result[i].orderNo + '</td>';
            content01 += '<td ' + _editCellClass + '>' + formatNullData(result[i].styleNo) + '</td>';
            content01 += '<td>' + formatNullData(result[i].materialName) + '</td>';
            content01 += '<td>' + formatNullData(result[i].supplierName) + '</td>';
            content01 += '<td ' + _editCellClass + '>' + formatNullData(result[i].partOfNeed) + '</td>';
            content01 += '<td class="edited-cell">' + formatNullData(result[i].materialCode) + '</td>';
            content01 += '</tr>';

            content02 += '<tr ' + _trCss + '>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].materialColourNumber) + '</td>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].materialColourName) + '</td>';
            content02 += '<td style="text-align:center;" _msh_uomid="' + result[i].uomId + '">' + formatNullData(result[i].uomName) + '</td>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].demandedQuantity) + '</td>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].specification) + '</td>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].destination) + '</td>';
            content02 += '<td ' + _editCellClass + '>' + formatNullData(result[i].description) + '</td>';    //备注
            content02 += '</tr>';
            $('#tabData11 tbody').append(content01);
            $('#tabData12 tbody').append(content02);
            content01 = '';
            content02 = '';
        }
        setTwoTableRowColor("tabData11", "tabData12");
        $("#CheckAll").prop("checked", false);

        // 设置明细部分高度
        this.AutoAdjustTableHeightForLines();

        let cell_id = "_cell__field";
        let cell_name = "__cell__field";
        $('#tabData11 tbody tr').find("td.edited-cell").click(function () {
            switch ($(this).index()) {
                case 7:
                    $(this).attr("_old_val", $(this).text());
                    OnCellClickEvent($(this), cell_id, cell_name, 0);
                    break;
                default:
                    OnCellClickEvent($(this), cell_id, cell_name, 0);
                    break;

            }
        });
        $('#tabData12 tbody tr').find("td.edited-cell").click(function () {
            OnCellClickEvent($(this), cell_id, cell_name, 0);
        });

        // 拖动表格行改变显示顺序
        $("#tabData11 tbody").wxdragsort({
            dragWrapper: $("#tabLinesList"),
            placeHolderWrapper: $("#tabLinesList"),
            parentobj: $("#tabLinesList"),
            syncobj: "tabData12",
            dragColumnIndex: 2,
            dragEnd: () => {
                setTwoTableRowColor("tabData11", "tabData12");
                this.UpdateLinesOrder();
            }
        });
        /*
         // 设置回车处理事件
         $("#panelSlaveData_01").keyup((event) => {
         if (event.keyCode === 13) {
         this.ClearGridMaterialNoError();
         $("#ButSaveLines").focus();
         this.DoSaveLines();
         event.stopPropagation();
         }
         });*/
        $("#loading").hide();
    }
    // 拖动改变序号
    UpdateLinesOrder() {
        // 第一步，根据当前顺序，重新设置行号
        $("#tabData11 tbody").find("tr").each(function (index) {
            $(this).find("td").eq(2).html(index + 1);
        });

        // 第二步，同步到后台数据库
        let _result = [];
        $('#tabData11 tbody').find("tr").each(function (index) {
            let _OrderNo = $.trim($(this).find('td').eq(2).text());   // 顺序号
            let item = {};
            item['linesId'] = $.trim($(this).attr("_mash_id"));
            item['orderNo'] = parseInt(_OrderNo);
            _result.push(item);
        });

        // 更新后台对应的序号
        super.DoAjax(_result, "/tech/mrp/feeding/lines/updateLinesRowNo.html", function (data, $self) {
            if (data > 0) {
                ShowSuccessMessagePanel("改变顺序完成。");
            }
        });
    }
    // 得到要保存的数据
    GetLinesData() {
        let jsonResult = [];
        //得到修改过数据
        $('#tabData12 tbody').find("tr").each(function () {
            let row = $(this).index();
            let $tr2 = $(this);
            let $tr1 = $('#tabData11 tbody').find("tr").eq(row);
            if ($tr2.find("td.dirty").length || $tr1.find("td.dirty").length) {
                let item = {};
                item['headerId'] = $("#HeaderId").val();    // 返回明细使用
                item['billNo'] = $.trim($("#BillNo").val());
                item['linesId'] = $tr1.attr("_mash_id");
                item['quotedFlag'] = $tr1.attr("_mash_quoted");       //用于后台
                item['materialId'] = $tr1.attr("_materialId");
                item['styleNo'] = formatNullInputValue($.trim($tr1.find('td').eq(3).text()));                   // 款号
                item['partOfNeed'] = formatNullInputValue($.trim($tr1.find('td').eq(6).text()));                // 使用部位
                //item['materialCode'] = formatNullInputValue($.trim($tr1.find('td').eq(6).text()));            // 料号
                item['orderNo'] = $.trim($tr1.find('td').eq(2).text());
                item['materialColourNumber'] = formatNullInputValue($.trim($tr2.find('td').eq(0).text()));      // 材料色号
                item['materialColourName'] = formatNullInputValue($.trim($tr2.find('td').eq(1).text()));        // 材料颜色
                item['uomId'] = $.trim($tr2.find('td').eq(2).attr("_msh_uomid"));                               // 计量单位
                item['demandedQuantity'] = formatNullInputValue($.trim($tr2.find('td').eq(3).text())) === null ? 0 : $.trim($tr2.find('td').eq(3).text());  // 订货数
                // 如果规格有自定义的情况，那么以自定义为主，否则 就用材料的规格代替
                if ($tr2.find('td').eq(4).hasClass("dirty")) {
                    item['specification'] = formatNullInputValue($.trim($tr2.find('td').eq(4).text()));          // 规格
                } else {
                    item['specification'] = null;
                }
                item['destination'] = formatNullInputValue($.trim($tr2.find('td').eq(5).text()));               // 发货目的地
                item['description'] = formatNullInputValue($.trim($tr2.find('td').last().text()));              // 备注
                item['updatedBy'] = $("#UserId").val();

                jsonResult.push(item);
            }
        });
        return JSON.stringify(jsonResult);
    }
    DoSaveLines() {
        if ($('#tabData11 tbody tr').find("td").eq(7).hasClass("dirty")) {
            showModal(350, 140, '确认', '', null, null, 1, '请问，确定要改变当前材料吗？', () => {
                this.OnSaveLines();
            }, () => {
                return false;
            });
        } else {
            this.OnSaveLines();
        }
    }
    OnSaveLines() {
        //step 1、进行页面验证，失败则返回
        let success_01 = CheckGridInput();
        if (!success_01)
            return;

        super.SaveLines("/tech/mrp/feeding/lines/update.html", function (data, _this) {
            if (data.Success === undefined) {
                ShowSuccessMessagePanel("保存成功。");
            } else {
                if (data.Success) {
                    _this.BuildDataTable(data.LinesList);
                    ShowSuccessMessagePanel("保存成功。");
                } else {
                    for (let i = 0; i < data.ErrRow.length; i++) {
                        $('#tabData11 tbody').find("tr").each(function () {
                            if (parseInt($(this).find("td").eq(2).text()) === parseInt(data.ErrRow[i])) {
                                $(this).find('td').eq(7).addClass("error");
                                $(this).find('td').eq(7).attr('title', "料号有错误。");
                            }
                        });
                    }
                    ShowErrorMessagePanel("料号有错误。");
                }
            }
        });
    }
    //删除行
    DoDeleteLines($self) {
        // 为了防止在增加材料时之前修改过的内容丢失，所以要首先保存一下
        if ($('#tabData11 tbody tr').find("td.dirty").length > 0 || $('#tabData12 tbody tr').find("td.dirty").length > 0) {
            showModal(370, 140, '系统信息', '', null, null, 1, "数据有更新，是否需要保存？", () => {
                this.SaveLines();
            }, () => {
                this.OnDeleteLines($self);
            });
        } else {
            this.OnDeleteLines($self);
        }
    }
    OnDeleteLines($self) {
        let params = {};
        params['HeaderId'] = $("#HeaderId").val();
        params['LinesId'] = $self.parent().parent().attr("_mash_id");
        params['LinesData'] = $.trim($("#BillNo").val());
        params['DeletedBy'] = $("#UserId").val();
        this.DeleteLines(params, "/tech/mrp/feeding/lines/delete.html", function (data, _this) {
            // 刷新明细
            _this.BuildDataTable(data.LinesList);
            ShowSuccessMessagePanel("删除成功。");
        });
    }
    // 批量删除
    DoBatchDeleteLines() {
        if ($("input[type='checkbox'][name='_check_row']:checked").length <= 0) {
            ShowErrorMessagePanel("请选择要删除的数据。");
            return false;
        }

        super.BatchDeleteLines('/tech/mrp/feeding/lines/batchDelete.html', function (data, $self) {
            // 刷新明细
            $self.BuildDataTable(data);
            $("#CheckAll").prop("checked", false);
            ShowSuccessMessagePanel("批量删除完成。");
        });
    }
    // 增加明细
    NewLines() {
        // 为了防止在增加材料时之前修改过的内容丢失，所以要首先保存一下
        if ($('#tabData11 tbody tr').find("td.dirty").length > 0 || $('#tabData12 tbody tr').find("td.dirty").length > 0) {
            showModal(370, 140, '系统信息', '', null, null, 1, "数据有更新，是否需要保存？", () => {
                this.SaveLines();
            }, () => {
                this.DoInsertMaterial();
            });
        } else {
            this.DoInsertMaterial();
        }
    }
    DoInsertMaterial() {
        let _choice = new CommonChoice();
        _choice.DoChoiceMaterial(1, '选择材料', (data) => {
            if (data) {
                let new_lines = [];
                for (let i = 0; i < data.length; i++) {
                    let item = {};
                    item['headerId'] = parseInt($("#HeaderId").val());
                    item['billNo'] = $.trim($("#BillNo").val());
                    item['materialId'] = parseInt(data[i].materialId);
                    item['createdBy'] = parseInt($.trim($("#UserId").val()));
                    item['updatedBy'] = parseInt($.trim($("#UserId").val()));
                    if ($("#tabData11 tbody tr.row__clicked").length) {
                        // 得到当前选择行的序号，为了插入新行做准备
                        item['orderNo'] = parseInt($("#tabData11 tbody tr.row__clicked").find('td').eq(2).text());
                    } else {
                        item['orderNo'] = null;
                    }

                    new_lines.push(item);
                }
                // 根据所选材料，增加明细表记录
                super.DoAjax(new_lines, "/tech/mrp/feeding/lines/insert.html", function (data, _this) {
                    if (data !== null) {
                        _this.BuildDataTable(data);
                        ShowSuccessMessagePanel("材料增加完成。");
                    }
                });
            }
        });
    }
    // 批量选择的数据(类中data:this.GetCheckedLinesData)
    GetCheckedLinesData() {
        let choiced_data = [];
        if ($("input[type='checkbox'][name='_check_row']:checked").length > 0) {
            $("input[type='checkbox'][name='_check_row']:checked").each(function () {
                let item = {};
                item['headerId'] = $("#HeaderId").val();
                item['linesId'] = $(this).parent().parent().parent().attr("_mash_id");
                item['deletedBy'] = $.trim($("#UserId").val());
                choiced_data.push(item);
            });
        }
        return JSON.stringify(choiced_data);
    }
    // 通过选择的行得到料号，然后弹出材料选择窗口供选择类似的材料（用料号前8位作为条件）
    DoChoiceMaterialCodePopupWnd() {
        if ($("tr.row__clicked").length > 0) {
            let _choice = new CommonChoice();
            _choice.DoChoiceMaterial('0&materialCode=' + $("#tabData11 tr.rowClicked td").eq(7).text(), '选择材料', (data) => {
                if (data) {
                    let $tr1 = $("#tabData11 tr.row__clicked");
                    let _materialId = data[0];

                    showModal(350, 140, '确认', '', null, null, 1, '请问，确定要改变当前材料吗？', () => {
                        this.OnUpdateRowByMaterialId($tr1.attr("_mash_id"), _materialId);
                    });
                }
            });
        } else {
            ShowErrorMessagePanel('请选择要更改的明细数据行。');
        }
    }
    OnUpdateRowByMaterialId(linesId, _materialId) {
        let criterion = {};
        criterion['LinesId'] = linesId;
        criterion['MaterialId'] = _materialId;
        super.DoAjax(criterion, "/tech/mrp/feeding/lines/updateLinesByMaterialId.html", function (data, $self) {
            let $tr1 = $("#tabData11 tr.row__clicked");
            let $tr2 = $("#tabData12 tbody tr").eq($tr1.index());
            if (data.Success) {
                $tr1.attr("_materialId", data.MaterialId);
                $tr1.find("td").eq(4).text(data.MaterialName);    // 料名
                $tr1.find("td").eq(7).text(data.MaterialCode);
                $tr1.find("td").eq(5).text(data.SupplierName);    // 供应商
                $tr2.find("td").eq(2).attr("_uomId", data.UomId); // 计量单位标识
                $tr2.find("td").eq(2).text(data.UomName);         // 计量单位名
                $tr2.find("td").eq(4).text(data.Specification);   // 规格
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(7).removeClass("dirty");
                }
                ShowSuccessMessagePanel("材料改变成功。");
            } else {
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(7).removeClass("dirty");
                }
                $tr1.find("td").eq(7).text($tr1.find("td").eq(7).attr("_old_val"));  // 这个等于撤销功能
                ShowErrorMessagePanel("料号输入错误。");
            }
        });
    }
    // 引入类似款号的补料单
    ImportLinesFromOtherBom() {
        let _choice = new CommonChoice();
        _choice.DoChoiceMrpFeeding(0, '引入其他补料单明细', (data) => {
            if (data) {
                let item = {};
                item['HeaderId'] = parseInt($("#HeaderId").val());
                item['ImportedBillHeaderId'] = parseInt(data[0]);
                item['MaxOrderNo'] = parseInt($.trim($("#tabData11 tr:last").find("td").eq(2).text()) === '' ? 0 : $.trim($("#tabData11 tr:last").find("td").eq(2).text()));
                item['CreatedBy'] = parseInt($.trim($("#UserId").val()));
                item['UpdatedBy'] = parseInt($.trim($("#UserId").val()));
                super.DoAjax(item, "/tech/mrp/feeding/lines/import.html", function (data, _this) {
                    if (data !== null) {
                        // 刷新明细记录                       
                        _this.BuildDataTable(data);
                        ShowSuccessMessagePanel('引入完成。');
                    }
                });
            }
        });
    }
    //复制行
    CopyRow() {
        if ($("#tabData11 tr.row__clicked").length > 0) {
            //先清空
            this.clipboard.splice(0, this.clipboard.length);
            let $tr1 = $("#tabData11 tbody tr.row__clicked");
            let $tr2 = $("#tabData12 tbody tr").eq($tr1.index());
            this.clipboard.push($tr1.attr("_materialId"));
            this.clipboard.push($.trim($tr1.find('td').eq(3).text()));             // 款号
            this.clipboard.push($.trim($tr2.find('td').eq(4).text()));             // 规格
            this.clipboard.push($.trim($tr2.find('td').eq(5).text()));             // 发货目的地
            this.clipboard.push($.trim($tr2.find('td').eq(2).attr("_msh_uomid"))); // 计量单位
            this.clipboard.push($.trim($tr2.find('td').eq(0).text()));             // 材料色号
            this.clipboard.push($.trim($tr2.find('td').eq(1).text()));             // 材料色
            ShowSuccessMessagePanel('已经拷贝当前选择的数据到剪切板。');
        } else {
            ShowErrorMessagePanel('请选择要拷贝的明细数据行。');
        }
    }
    //粘贴行
    PosteRow() {
        if (this.clipboard === null || this.clipboard.length === 0) {
            ShowErrorMessagePanel('剪切板没有数据。');
            return false;
        }
        let item = {};
        item['HeaderId'] = parseInt($("#HeaderId").val());
        item['MaterialId'] = parseInt(this.clipboard[0]);
        item['StyleNo'] = formatNullInputValue(this.clipboard[1]);
        item['Specification'] = formatNullInputValue(this.clipboard[2]);
        item['Destination'] = formatNullInputValue(this.clipboard[3]);
        item['UomId'] = parseInt(this.clipboard[4]);
        item['MaterialColourNumber'] = formatNullInputValue(this.clipboard[5]);
        item['MaterialColourName'] = formatNullInputValue(this.clipboard[6]);
        item['CreatedBy'] = parseInt($.trim($("#UserId").val()));
        item['UpdatedBy'] = parseInt($.trim($("#UserId").val()));
        if ($("#tabData11 tbody tr.row__clicked").length) {
            item['OrderNo'] = parseInt($("#tabData11 tbody tr.row__clicked").find('td').eq(2).text());
        } else {
            item['OrderNo'] = null;
        }

        // 粘贴数据
        super.DoAjax(item, "/tech/mrp/feeding/lines/paste.html", function (data, $self) {
            if (data !== null) {
                // 刷新明细记录                       
                $self.BuildDataTable(data);
                ShowSuccessMessagePanel('粘贴数据完成。');
            }
        });
    }
    //在当前行直接录入料号，然后通过回车键来更改
    DoChangeMaterialByNo(linesId, materialId) {
        let _params = {};
        _params['LinesId'] = linesId;
        _params['MaterialId'] = materialId;

        super.DoAjax(_params, "/tech/mrp/feeding/lines/updateLinesByMaterialId.html", function (data, $self) {
            let $tr1 = $("#tabData11 tr.rowClicked");
            let $tr2 = $("#tabData12 tr.rowClicked");
            if (data.success) {
                $tr1.attr("_materialId", data.materialId);
                $tr1.find("td").eq(4).text(data.materialName);    // 料名
                $tr1.find("td").eq(7).text(data.materialCode);
                $tr1.find("td").eq(5).text(data.supplierName);    // 供应商
                $tr2.find("td").eq(2).attr("_uomId", data.uomId); // 计量单位标识
                $tr2.find("td").eq(2).text(data.uomName);         // 计量单位名
                $tr2.find("td").eq(4).text(data.specification);   // 规格
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(7).removeClass("dirty");
                }
                ShowSuccessMessagePanel("材料改变成功。");
            } else {
                if ($(".cell")) {
                    $(".cell").remove();
                    $tr1.find("td").eq(7).removeClass("dirty");
                }
                $tr1.find("td").eq(7).text($tr1.find("td").eq(7).attr("_old_val"));  // 这个等于撤销功能
                ShowErrorMessagePanel("料号输入错误。");
            }
        });
    }
    // 设置行选择后的状态(这个提供在BaseEditSlave类里调用)
    SetRowStatus($self) {
        super.AdjustRowStatus($self, function ($row, index) {
            $('#tabData12 tbody tr:eq(' + index + ')').addClass("row__selected");
            // 设置删除按钮失效
            $row.children('td').eq(1).children('span').eq(0).attr("onclick", "");
        }, function ($row, index) {
            $('#tabData12 tbody tr:eq(' + index + ')').removeClass("row__selected");
            // 设置删除按钮有效
            let _event_delete_onclick = '_InstancePageLines.DeleteLines($(this))';
            $row.children('td').eq(1).children('span').eq(0).attr("onclick", _event_delete_onclick);
        });
    }
    AutoAdjustTableHeightForLines() {
        let h = $(window).height();
        let _tabTop = $("#divH11").offset().top + 26;   // 用于随着窗口变化，下面明细高度随之变化的一个节点
        let _rc = Math.floor((h - _tabTop - 25) / 25);
        let _dh = _rc * 25 + 17;
        let _rowH = this.rows * 25 + 17; // 计算行高
        _dh = (_rowH >= _dh) ? _dh : _rowH;

        $("#divD11").css({"max-height": _dh - 17, height: _dh - 17});
        $("#divD12").css({"max-height": _dh + 1, height: _dh + 1});
    }
    ScrollTo() {
        $('#divH12').scrollLeft($('#divD12').scrollLeft());
        $('#divD11').scrollTop($('#divD12').scrollTop());
    }
    // 清除料号错误
    ClearGridMaterialNoError() {
        $('#tabData11 tbody').find("tr").each(function (index) {
            $(this).find('td').eq(7).attr('title', '');
            $(this).find('td').eq(7).removeClass("error");
        });
    }
}

let _InstancePageHeader = null;
let _InstancePageLines = null;

//-----------------------------------------------------------------------------
// 页面初始化
//-----------------------------------------------------------------------------
function onPageReady() {
    let _pageStatus = parseInt($("#Action").val());
    let _dataId = $("#HeaderId").val();

    let mrp_feeding_list_result = $.cookie("mrp_feeding_list_result") === undefined ? "" : $.cookie("mrp_feeding_list_result");
    let _pageListData = [];
    if (mrp_feeding_list_result !== "") {
        _pageListData = mrp_feeding_list_result.split(',');
        $("#rec_total_rows").text(_pageListData.length);
        $("#rec_cur_row").text($.inArray(_dataId, _pageListData) + 1);

        if (_pageListData.length > 0) {
            let index = $.inArray(_dataId, _pageListData);
            if (index === 0) {
                $("#ButPrev").attr("disabled", "disabled");
            } else {
                $("#ButNext").removeAttr("disabled");
            }
            if (index === (_pageListData.length - 1)) {
                $("#ButNext").attr("disabled", "disabled");
            } else {
                $("#ButPrev").removeAttr("disabled");
            }
        }
    } else {
        $("#rec_total_rows").text("1");
        $("#rec_cur_row").text("1");
    }
    _InstancePageHeader = new MyPageHeader(_dataId, 0, 0, _pageStatus, _pageListData,
            "/tech/mrp/feeding/list.html",
            "/tech/mrp/feeding/fetchByKey.html",
            "/tech/mrp/feeding/header/save.html",
            "/tech/mrp/feeding/export.html",
            "/tech/mrp/feeding/print.html");

    _InstancePageLines = new MyPageLines();
    $("#tabPanelHeader").wxTabs({tabContent: "tabPanelContent"});

    window.laydate.render({
        elem: '#ScheduledDate',
        theme: '#393D49',
        trigger: 'click'
    });

    $("#hPanelSplitter").click(function () {
        if ($(this).children("i").hasClass("fa-angle-double-up")) {
            _InstancePageHeader.Collapse();
        } else {
            _InstancePageHeader.Expand();
        }
    });

    _InstancePageHeader.OnPageLoad();
}

// 画面大小或者位置移动
function onPageResize() {
    let wLeftList = 893; // 左边列表固定宽度
    let w = $(window).width();
    let h = $(window).height();

    $("#divH12").css({width: w - 16 - wLeftList - 17});
    $("#divD12").css({left: -1, width: w - wLeftList - 15});

    if (_InstancePageLines !== null)
        _InstancePageLines.AutoAdjustTableHeightForLines();
}

//-----------------------------------------------------------------------------
// 验证函数
//-----------------------------------------------------------------------------
$.validator.setDefaults({
    ignore: 'hidden, [reaonly=readonly]'
});
$.validator.addMethod("valueNotEquals", function (value, element, arg) {
    return arg !== value;
}, "Value must not equal arg.");

$(function () {
    $("#form_data").validate({
        // Step 1：设置验证规则和错误消息
        rules: {
            _BillNo: "required",
            _ScheduledByName: "required",
            _FeedingTypeId: {
                valueNotEquals: "-1",
                required: true
            },
            _ScheduledDate: {
                dateISO: true,
                required: true
            }
        },
        messages: {
            _BillNo: "请填写补料单号。",
            _ScheduledByName: "请填写订料人。",
            _FeedingTypeId: {
                valueNotEquals: "请选择补料类型。",
                required: "请选择补料类型。"
            },
            _ScheduledDate: {
                dateISO: "请填写正确的填表日期。",
                required: "请填写填表日期。"
            }
        },
        // Step 2：设置验证触发事件
        onclick: false,
        onfocusout: false,
        onfocusin: false,
        onkeyup: false,
        onkeydown: false,
        focusInvalid: false,
        // Step 3：设置错误信息提示
        showErrors: window.showErrors  //使用自定义的错误显示方法
    });
});

// 验证输入
function CheckGridInput() {
    $('#tabData12 tbody').find("tr").each(function (index) {
        let $tr2 = $('#tabData12 tbody').find("tr").eq(index);
        let _ColourNumber = $.trim($tr2.find('td').eq(0).text()); // 材料色号
        let _ColourName = $.trim($tr2.find('td').eq(1).text());   // 材料颜色
        let _QuantityDemand = $.trim($tr2.find('td').eq(3).text()) === '' ? 0 : $.trim($tr2.find('td').eq(3).text()); // 订购数量

        if (_ColourNumber !== '' && _ColourName === '') {
            GridCheckErrHandle($tr2, 1, '请输入材料颜色。');
        } else {
            GridCheckSuccessHandle($tr2, 1);
        }
        if (_QuantityDemand !== 0) {
            if (!isNumber(_QuantityDemand)) {
                GridCheckErrHandle($tr2, 3, '请输入正确的数字。');
            } else {
                GridCheckSuccessHandle($tr2, 3);
            }
        }
    });
    if ($('#tabData11 tbody').find('td.error').length > 0 || $('#tabData12 tbody').find('td.error').length > 0) {
        ShowErrorMessagePanel('对不起，填写的数据有错误。');
        return false;
    } else {
        return true;
    }
}
function GridCheckErrHandle($row, index, errMsg) {
    $row.find('td').eq(index).addClass("error");
    $row.find('td').eq(index).attr('title', errMsg);
}
function GridCheckSuccessHandle($row, index) {
    $row.find('td').eq(index).removeClass("error");
    $row.find('td').eq(index).attr('title', '');
}
// 清除料号错误
function ClearGridMaterialNoError() {
    $('#tabData11 tbody').find("tr").each(function (index) {
        $(this).find('td').eq(4).attr('title', '');
        $(this).find('td').eq(4).removeClass("error");
    });
}